package juc.popular;

import java.util.Collection;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Predicate;

/**
 * {@link LinkedBlockingQueue} 是链表实现的线程安全的有界的阻塞队列
 * * 构造方法
 * {@link LinkedBlockingQueue#LinkedBlockingQueue()}            不指定初始容量,默认{@link Integer#MAX_VALUE}
 * {@link LinkedBlockingQueue#LinkedBlockingQueue(int)}         指定初始容量
 * {@link LinkedBlockingQueue#LinkedBlockingQueue(Collection)}  指定初始集合
 * * 其他方法
 * {@link LinkedBlockingQueue#clear()}                       清空
 * {@link LinkedBlockingQueue#contains(Object)}              如果此队列包含指定的元素,则返回 true
 * {@link LinkedBlockingQueue#drainTo(Collection)}           从此队列中删除所有可用元素,并将它们添加到给定集合中
 * {@link LinkedBlockingQueue#drainTo(Collection, int)}      从该队列中删除最多给定数量的可用元素,并将它们添加到给定集合中
 * {@link LinkedBlockingQueue#forEach(Consumer)}             循环
 * {@link LinkedBlockingQueue#iterator()}                    以适当的顺序返回此队列中元素的迭代器
 * <p>
 * {@link LinkedBlockingQueue#offer(Object)}                     入队,队列满了会返回false
 * {@link LinkedBlockingQueue#offer(Object, long, TimeUnit)}     入队,可以设置等待时间，队列满了会返回false
 * {@link LinkedBlockingQueue#put(Object)}                       入队,队列满了会阻塞
 * <p>
 * {@link LinkedBlockingQueue#peek()}                            获取队列头部元素，为空会返回null
 * {@link LinkedBlockingQueue#element()}                         获取队列头部元素，为空会会报错
 * <p>
 * {@link LinkedBlockingQueue#poll()}                            出队,队列为空会返回null
 * {@link LinkedBlockingQueue#poll(long, TimeUnit)}              出队,队列为空会报错
 * {@link LinkedBlockingQueue#remove()}                          出队,队列为空会报错
 * {@link LinkedBlockingQueue#take()}                            出队,队列为空会阻塞
 * <p>
 * {@link LinkedBlockingQueue#remainingCapacity()}           返回理想情况下（在没有内存或资源约束的情况下）此队列可以无阻塞地接受的其他元素的数量
 * {@link LinkedBlockingQueue#remove(Object)}                删除元素
 * {@link LinkedBlockingQueue#removeAll(Collection)}         删除集合
 * {@link LinkedBlockingQueue#removeIf(Predicate)}           按条件删除
 * {@link LinkedBlockingQueue#retainAll(Collection)}         取交集
 * {@link LinkedBlockingQueue#spliterator()}                 在此队列中的元素上返回Spliterator
 * {@link LinkedBlockingQueue#toArray()}                     转换成数组
 * {@link LinkedBlockingQueue#toArray(Object[])}             转换成数组
 *
 * @author 王霄
 * @date 2021/9/24 21:17
 */
public class LinkedBlockingQueueDemo {
    public static void main(String[] args) {

    }
}
